Sektor pariwisata merupakan salah satu sektor yang dapat memacu pertumbuhan ekonomi suatu negara bahkan di dunia. Menurut data yang dihimpun dari laporan World Travel & Tourism Council pada tahun 2019 tentang dampak pariwisata terhadap ekonomi dunia, sektor pariwisata menyumbang 10,4% dari Produk Domestik Bruto (PDB) dunia dan juga 3,8% dari total jumlah pekerja di seluruh dunia bekerja di bidang pariwisata. Prediksi pada tahun 2029 mendatang, sumbangan sektor pariwisata terhadap Produk Domestik Bruto (PDB) dunia akan meningkat 3,7% menjadi 11,5% dari PDB dunia dan juga total pekerja di bidang pariwisata akan meningkat 2,1% menjadi 4,2%. Berdasarkan data tersebut sektor pariwisata ternyata sangat berpengaruh terhadap keberlangsungan ekonomi dunia yang juga berdampak langsung terhadap masyarakat. Berbicara tentang sektor pariwisata tentu tidak lepas dengan industri perhotelan yang merupakan penunjang keberlangsungan industri pariwisata di suatu daerah.

Sebagai salah satu negara yang memiliki iklim pariwisata yang sangat baik, Portugal dihadapkan dengan berbagai masalah. Menurut berita yang terkini dihimpun dari CNBC pada tahun 2021, sebanyak 90% dari total reservasi kamar hotel dibatalkan oleh turis akibat adanya perubahan regulasi dari pemerintah Inggris mengenai kewajiban karantina yang setelah kembali dari Portugal. Sebelum adanya regulasi karantina ini, perusahaan dengan jaringan hotel terbesar di Portugal, Pestana Hotel Group, mencatat kenaikan 50 sampai 60 persen reservasi kamar hotel dibandingkan dengan tahun 2017 dan 2019. Fenomena ini menunjukkan bahwa dalam waktu singkat pelaku industri hotel dapat mendapatkan keuntungan namun di satu sisi juga dapat memperoleh kerugian yang justru dapat membahayakan keberlangsungan dari industri hotel itu sendiri
Di Indonesia sendiri peranan hotel dalam industri pariwisata memang sangat penting sebagai sarana akomodasi bagi turis mancanegara maupun turis lokal. Menurut data yang dihimpun dari Badan Pusat Statistik di Indonesia, Tingkat Penghunian Kamar (TPK) hotel klasifikasi bintang di Indonesia pada November 2018 mencapai rata – rata 60,19 persen yang menunjukkan ketercukupan jumlah kamar hotel di Indonesia bagi para wisatawan. Namun, pada tahun 2019 menurut Hariyadi Sukamdani, Ketua PHRI (Persatuan Hotel dan Restoran Indonesia) bahwa akan ada penambahan jumlah unit kamar mencapai 50.000 kamar dan berpotensi bertambah menjadi 60.000 kamar. Melihat pernyataan ini, maka diyakini bahwa industri hotel akan semakin bertambah banyak digemari oleh para pebisnis.
Pelaku industri hotel yang semakin hari semakin bertambah banyak akan dihadapkan dengan berbagai tantangan. Salah satu tantangan ialah revolusi industri 4.0 yang membuat pelaku industri hotel harus dapat beradaptasi dengan memanfaatkan peran teknologi dalam keberlangsungan usahanya. Salah satu pemanfaatan teknologi yang marak dalam industri adalah analisis big data. Menurut Harvard Business Review pada artikel Domainesia, 99% pelaku bisnis yang disurvei melaporkan mereka ingin menganalisis Big Data dan menggunakan Artificial Intelligence namun hanya 30% yang benar – benar melakukannya. Pada dasarnya, analisis dari pemanfaatan big data itu sendiri dapat meningkatkan kepuasan pelanggan, menciptakan kampanye pemasaran, serta menghadirkan penawaran yang personal.
Melihat pentingnya pemanfaatan big data dalam proses pengambilan keputusan dalam sebuah perusahaan, pada proyek kali ini akan dilakukan analisis data pemesanan hotel di Portugal untuk mengetahui penyebab pembatalan pesanan yang secara langsung berdampak kepada aktivitas operasional dari hotel tersebut. Hasil analisis tersebut dapat dimanfaatkan oleh pihak manajemen hotel untuk mengetahui alasan yang rinci mengenai penyebab pembatalan pemesanan dan juga dapat mengantisipasi tindak pembatalan pemesanan untuk kedepannya dengan melakukan prediksi dari pesanan yang dilakukan oleh customer
Pembatalan reservasi kamar hotel merupakan hal yang sulit untuk dihindari. Banyak sekali faktor yang memengaruhi pembatalan reservasi kamar hotel. Analisis berdasarkan intuisi dan pengamatan oleh tim manajemen perhotelan tidak cukup dapat menggaransi untuk mengetahui secara pasti penyebab pembatalan reservasi kamar hotel dikarenakan banyaknya faktor penyebab. Saat ini banyak bisnis hotel sudah menggunakan sistem deposit untuk "menggaransi" reservasi kamar hotel yang sudah dibuat oleh customer. Namun, hal ini masih belum cukup seimbang apabila dibandingkan dengan persiapan yang sudah dilakukan untuk penyambutan kedatangan customer dan juga terdapat potensi keuntungan yang hilang akibat pembatalan reservasi kamar apalagi yang dilakukan mendekati hari kedatangan.
Tindak pencegahan pembatalan reservasi kamar hotel dapat dilakukan secara dini dengan menggunakan machine learning yang dapat memprediksi pembatalan reservasi dengan melihat faktor-faktor penyebab. Alasan yang pasti akan tindak pembatalan reservasi juga dapat diketahui secara faktual berdasarkan data yang ada melalui metode pengolahan dan interpretasi data.
Dataset yang digunakan berisi data pemesanan sebuah hotel di daerah kota dan sebuah hotel di daerah resor di negara Portugal; data yang dikoleksi seperti kapan pemesanan dilakukan, lama tinggal tamu di hotel, banyak tamu dewasa, banyak tamu anak-anak, banyak tamu bayi, jumlah ruang parkir tersedia, dan 25 fitur lainnya. Dataset ini berasal dari sebuah artikel yang diterbitkan oleh ScienceDirect.
Artikel ini ditulis oleh Nuno Antonio, Ana Almeida, dan Luis Nunes untuk jurnal Data in Brief, Volume 22, Februari 2019. Berdasarkan artikel ScienceDirect tersebut, diketahui bahwa kedua hotel berlokasi di Portugal (“H1” berada di daerah resor di Algarve dan “H2” berada di kota Lisbon). Jarak antara dua lokasi ini kurang lebih 280 km dengan mobil dan kedua lokasi berbatasan dengan Atlantik Utara. Tujuan pengumpulan data tersebut adalah untuk memprediksi sebab-sebab kamar dibatalkan.
Kolom-kolom yang terdapat dalam dataset ini, antara lain:
hotel: Hotel (H1 = Resort Hotel or H2 = City Hotel)is_canceled: Value indicating if the booking was canceled (1) or not (0)lead_time: Number of days that elapsed between the entering date of the booking into the PMS and the arrival datearrival_date_year: Year of arrival datearrival_date_month: Month of arrival datearrival_date_week_number: Week number of year for arrival datearrival_date_day_of_month: Day of arrival datestays_in_weekend_nights: Number of weekend nights (Saturday or Sunday) the guest stayed or booked to stay at the hotelstays_in_week_nights: Number of week nights (Monday to Friday) the guest stayed or booked to stay at the hoteladults: Number of adultschildren: Number of childrenbabies: Number of babiesmeal: Type of meal booked. Categories are presented in standard hospitality meal packages: country: Country of origin. Categories are represented in the ISO 3155–3:2013 formatmarket_segment: Market segment designation. In categories, the term “TA” means “Travel Agents” and “TO” means “Tour Operators”distribution_channel: Booking distribution channel. The term “TA” means “Travel Agents” and “TO” means “Tour Operators”is_repeated_guest: Value indicating if the booking name was from a repeated guest (1) or not (0)previous_cancellations: Number of previous bookings that were cancelled by the customer prior to the current bookingprevious_bookings_not_canceled: Number of previous bookings not cancelled by the customer prior to the current bookingreserved_room_type: Code of room type reserved. Code is presented instead of designation for anonymity reasons.assigned_room_type: Code for the type of room assigned to the booking. Sometimes the assigned room type differs from the reserved room type due to hotel operation reasons (e.g. overbooking) or by customer request. Code is presented instead of designation for anonymity reasons.booking_changes: Number of changes/amendments made to the booking from the moment the booking was entered on the PMS until the moment of check-in or cancellationdeposit_type: Indication on if the customer made a deposit to guarantee the booking. This variable can assume three categories: agent: ID of the travel agency that made the bookingcompany: ID of the company/entity that made the booking or responsible for paying the booking. ID is presented instead of designation for anonymity reasonsdays_in_waiting_list: Number of days the booking was in the waiting list before it was confirmed to the customercustomer_type: Type of booking, assuming one of four categories:adr: Average Daily Rate as defined by dividing the sum of all lodging transactions by the total number of staying nightsrequired_car_parking_spaces: Number of car parking spaces required by the customertotal_of_special_requests: Number of special requests made by the customer (e.g. twin bed or high floor)reservation_status: Reservation last status, assuming one of three categories:reservation_status_date: Date at which the last status was set. This variable can be used in conjunction with the ReservationStatus to understand when was the booking canceled or when did the customer checked-out of the hotel.Selanjutnya, dalam pembuatan model machine learning untuk melakukan prediksi pembatalan reservasi kamar hotel menggunakan variabel is_canceled untuk target variabelnya, dan variabel lain sebagai prediktor yang tentunya akan melalui serangkaian tahap feature engineering terlebih dahulu.
Model machine learning yang akan dibuat adalah model klasifikasi (supervised learning) dengan memanfaatkan algoritma berbasis Decision Tree, yaitu Random Forest dan XGBoost.
Output dari proyek ini akan berupa dashboard menggunakan bahasa pemrograman Python dengan framework Dash. Dashboard akan menampilkan Explanatory Data Analysis dari data yang telah ada untuk menampilkan informasi tentang penyebab-penyebab tindak pembatalan reservasi kamar hotel. Selanjutnya akan terdapat form untuk mengisi data-data reservasi kamar hotel dan kemudian akan ditampilkan hasil berupa probabilitas potensi pembatalan dan rekomendasi strategi yang dapat dilakukan pihak hotel menggunakan metode LIME/SHAP untuk mendapatkan hasil interpretasi model machine learning yang robust.
Business Impact
Dengan mengetahui faktor-faktor atau fitur-fitur penyebab pembatalan pemesanan kamar hotel melalui analisis data, pihak manajemen perhotelan dapat menerapkan strategi yang tepat untuk meminimalisir tindak pembatalan pemesanan. Selain itu, tindakan antisipasi dengan cepat juga dapat dilakukan dengan menganalisis fitur-fitur yang terdapat pada pemesanan yang berpotensi untuk terjadi pembatalan dengan memberikan insentif atau promosi tambahan agar tindak pembatalan tidak terjadi.
import pandas as pd
import numpy as np
import plotly.express as px
hotel = pd.read_csv('dataset/hotel_bookings.csv')
hotel.head()
| hotel | is_canceled | lead_time | arrival_date_year | arrival_date_month | arrival_date_week_number | arrival_date_day_of_month | stays_in_weekend_nights | stays_in_week_nights | adults | ... | deposit_type | agent | company | days_in_waiting_list | customer_type | adr | required_car_parking_spaces | total_of_special_requests | reservation_status | reservation_status_date | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Resort Hotel | 0 | 342 | 2015 | July | 27 | 1 | 0 | 0 | 2 | ... | No Deposit | NaN | NaN | 0 | Transient | 0.0 | 0 | 0 | Check-Out | 2015-07-01 |
| 1 | Resort Hotel | 0 | 737 | 2015 | July | 27 | 1 | 0 | 0 | 2 | ... | No Deposit | NaN | NaN | 0 | Transient | 0.0 | 0 | 0 | Check-Out | 2015-07-01 |
| 2 | Resort Hotel | 0 | 7 | 2015 | July | 27 | 1 | 0 | 1 | 1 | ... | No Deposit | NaN | NaN | 0 | Transient | 75.0 | 0 | 0 | Check-Out | 2015-07-02 |
| 3 | Resort Hotel | 0 | 13 | 2015 | July | 27 | 1 | 0 | 1 | 1 | ... | No Deposit | 304.0 | NaN | 0 | Transient | 75.0 | 0 | 0 | Check-Out | 2015-07-02 |
| 4 | Resort Hotel | 0 | 14 | 2015 | July | 27 | 1 | 0 | 2 | 2 | ... | No Deposit | 240.0 | NaN | 0 | Transient | 98.0 | 0 | 1 | Check-Out | 2015-07-03 |
5 rows × 32 columns
hotel.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 119390 entries, 0 to 119389 Data columns (total 32 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 hotel 119390 non-null object 1 is_canceled 119390 non-null int64 2 lead_time 119390 non-null int64 3 arrival_date_year 119390 non-null int64 4 arrival_date_month 119390 non-null object 5 arrival_date_week_number 119390 non-null int64 6 arrival_date_day_of_month 119390 non-null int64 7 stays_in_weekend_nights 119390 non-null int64 8 stays_in_week_nights 119390 non-null int64 9 adults 119390 non-null int64 10 children 119386 non-null float64 11 babies 119390 non-null int64 12 meal 119390 non-null object 13 country 118902 non-null object 14 market_segment 119390 non-null object 15 distribution_channel 119390 non-null object 16 is_repeated_guest 119390 non-null int64 17 previous_cancellations 119390 non-null int64 18 previous_bookings_not_canceled 119390 non-null int64 19 reserved_room_type 119390 non-null object 20 assigned_room_type 119390 non-null object 21 booking_changes 119390 non-null int64 22 deposit_type 119390 non-null object 23 agent 103050 non-null float64 24 company 6797 non-null float64 25 days_in_waiting_list 119390 non-null int64 26 customer_type 119390 non-null object 27 adr 119390 non-null float64 28 required_car_parking_spaces 119390 non-null int64 29 total_of_special_requests 119390 non-null int64 30 reservation_status 119390 non-null object 31 reservation_status_date 119390 non-null object dtypes: float64(4), int64(16), object(12) memory usage: 29.1+ MB
Berdasarkan hasil yang didapatkan, diperoleh informasi bahwa pada dataset terdapat 119390 baris dan 32 kolom data.
hotel.isna().sum().sort_values(ascending=False)
company 112593 agent 16340 country 488 children 4 reserved_room_type 0 assigned_room_type 0 booking_changes 0 deposit_type 0 hotel 0 previous_cancellations 0 days_in_waiting_list 0 customer_type 0 adr 0 required_car_parking_spaces 0 total_of_special_requests 0 reservation_status 0 previous_bookings_not_canceled 0 is_repeated_guest 0 is_canceled 0 distribution_channel 0 market_segment 0 meal 0 babies 0 adults 0 stays_in_week_nights 0 stays_in_weekend_nights 0 arrival_date_day_of_month 0 arrival_date_week_number 0 arrival_date_month 0 arrival_date_year 0 lead_time 0 reservation_status_date 0 dtype: int64
Terdapat beberapa kolom pada data yang memiliki nilai NaN atau dapat dikategorikan sebagai missing value. Berikut solusi yang dilakukan untuk mengatasi missing value.
agent dan company atas dasar data yang mengandung missing value terlalu banyak dan fitur tersebut dirasa kurang tepat untuk melakukan proses prediksi.country.children.hotel.drop(columns=['agent','company'], inplace = True)
hotel['country'].fillna("Unknown", inplace = True)
hotel['children'].fillna(0, inplace = True)
hotel.isna().values.any()
False
Sudah tidak terdapat missing value pada data yang digunakan.
hotel.dtypes
hotel object is_canceled int64 lead_time int64 arrival_date_year int64 arrival_date_month object arrival_date_week_number int64 arrival_date_day_of_month int64 stays_in_weekend_nights int64 stays_in_week_nights int64 adults int64 children float64 babies int64 meal object country object market_segment object distribution_channel object is_repeated_guest int64 previous_cancellations int64 previous_bookings_not_canceled int64 reserved_room_type object assigned_room_type object booking_changes int64 deposit_type object days_in_waiting_list int64 customer_type object adr float64 required_car_parking_spaces int64 total_of_special_requests int64 reservation_status object reservation_status_date object dtype: object
Berdasarkan informasi mengenai tipe data yang diperlihatkan di atas, dapat diambil kesimpulan bahwa beberapa kolom/fitur belum memiliki tipe data yang sesuai. Berikut merupakan penyesuaian tipe data pada beberapa kolom/fitur yang terdapat pada data.
category_cols = ["hotel",
"arrival_date_month",
"meal",
"country",
"market_segment",
"distribution_channel",
"reserved_room_type",
"assigned_room_type",
"deposit_type",
"customer_type",
"reservation_status"]
boolean_cols = ['is_canceled', 'is_repeated_guest']
boolean_map = {0: 'No', 1: 'Yes'}
hotel['is_canceled'] = hotel['is_canceled'].map(boolean_map)
hotel['is_repeated_guest'] = hotel['is_repeated_guest'].map(boolean_map)
hotel[category_cols + boolean_cols] = hotel[category_cols + boolean_cols].astype('category')
hotel['is_canceled'].cat.reorder_categories(list(boolean_map.values()), inplace = True)
hotel['is_repeated_guest'].cat.reorder_categories(list(boolean_map.values()), inplace = True)
C:\Users\gustavo.t.interns\Anaconda3\envs\dcd_hotelbooking\lib\site-packages\pandas\core\arrays\categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.reorder_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object. res = method(*args, **kwargs) C:\Users\gustavo.t.interns\Anaconda3\envs\dcd_hotelbooking\lib\site-packages\pandas\core\arrays\categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.reorder_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object. res = method(*args, **kwargs)
Pada beberapa kolom yang memiliki nilai unik dilakukan perubahan tipe data ke tipe data category untuk menghemat memori. Selain itu pada kolom is_canceled dan is_repeated_guest dilakukan mapping agar lebih mudah diinterpretasi.
hotel['children'] = hotel['children'].astype('int')
Pada kolom children diubah tipe datanya menjadi int karena merupakan kolom numerik dengan data berupa bilangan bulat.
hotel['reservation_status_date'] = hotel['reservation_status_date'].astype('datetime64')
Pada kolom reservation_status_date diubah menjadi tipe data datetime sesuai dengan data pada kolom tersebut.
hotel.dtypes
hotel category is_canceled category lead_time int64 arrival_date_year int64 arrival_date_month category arrival_date_week_number int64 arrival_date_day_of_month int64 stays_in_weekend_nights int64 stays_in_week_nights int64 adults int64 children int32 babies int64 meal category country category market_segment category distribution_channel category is_repeated_guest category previous_cancellations int64 previous_bookings_not_canceled int64 reserved_room_type category assigned_room_type category booking_changes int64 deposit_type category days_in_waiting_list int64 customer_type category adr float64 required_car_parking_spaces int64 total_of_special_requests int64 reservation_status category reservation_status_date datetime64[ns] dtype: object
Berikut merupakan tipe data kolom final setelah dilakukan pengubahan tipe data.
Pada bagian ini akan dilakukan dive deeper terkait dengan data yang digunakan untuk mendapatkan pemahaman yang lebih mendalam terkait dengan data yang digunakan.
df_class_proportion = pd.crosstab(index=hotel.is_canceled,
columns=hotel.hotel).stack().reset_index()
df_class_proportion.rename(columns={0:'count'}, inplace=True)
fig_classproportion = px.bar(df_class_proportion, x="is_canceled",
y="count",
color="hotel",
title="Proporsi Kelas Berdasarkan Tipe Hotel")
fig_classproportion.show()
pd.crosstab(index=hotel.is_canceled,
columns=hotel.hotel,
margins=True,
normalize=True)
| hotel | City Hotel | Resort Hotel | All |
|---|---|---|---|
| is_canceled | |||
| No | 0.387202 | 0.242382 | 0.629584 |
| Yes | 0.277259 | 0.093157 | 0.370416 |
| All | 0.664461 | 0.335539 | 1.000000 |
Berdasarkan visualisasi di atas dapat dilihat bahwa proporsi target lebih banyak dimiliki kelas 'Not Cancel' (63%) dibandingkan dengan kelas 'Cancel' (37%) yang berarti bahwa kasus pembatalan reservasi lebih jarang terjadi. Selain itu proporsi tipe hotel didominasi oleh hotel dengan tipe 'City' sebanyak 66% dibandingkan denga tipe 'Resort' sebanyak 34%. Insight ini dapat digunakan untuk proses pelatihan pada model machine learning untuk menambah data pada kelas minoritas agar didapatkan proporsi target yang lebih seimbang
df_cancellation = hotel.copy()
df_cancellation['date_period'] = df_cancellation['reservation_status_date'].dt.to_period('W')
df_crosstabcancellation = pd.crosstab(index=df_cancellation.date_period,
columns=df_cancellation.is_canceled,
normalize='index').reset_index()
df_crosstabcancellation['date_period'] = df_crosstabcancellation['date_period'].values.astype('datetime64[W]')
fig_cancellationperday = px.line(df_crosstabcancellation,
x="date_period",
y="Yes")
fig_cancellationperday.update_traces(mode = "markers+lines",
hovertemplate = "Rate: %{y:.2f}%")
fig_cancellationperday.update_layout(title = 'Status Pembatalan Reservasi dari Minggu ke Minggu',
xaxis_title = 'Cancellation Period',
yaxis_title = 'Cancellation Period (%)',
hovermode = 'x',
template = "seaborn",
xaxis = dict(tickformat="%d %b %Y"))
fig_cancellationperday.show()
df_cancellationperday = pd.crosstab(index=hotel.reservation_status_date,
columns=hotel.is_canceled,
normalize='index')
df_cancellationperday[df_cancellationperday['Yes'] > df_cancellationperday['No']].count()[0]
251
Berdasarkan visualisasi di atas dapat dilihat bahwa mayoritas dari hari ke hari reservasi dengan status 'Not Cancel' lebih banyak daripada pemesanan dengan status 'Cancel' dengan tren yang cenderung menurun yang justru menjadi signal baik untuk pihak manajemen hotel. Namun ada 251 hari dimana kasus reservasi dengan status 'Cancel' lebih banyak daripada reservasi dengan status 'Not Cancel' yang perlu diperhatikan dengan cermat oleh pihak manajemen untuk menemukan penyebab lebih banyak pembatalan reservasi.
fig_leadtimedistribution = px.violin(hotel,
y="lead_time",
x="is_canceled",
color = "is_canceled",
title="Distribusi Waktu Tungu Reservasi")
fig_leadtimedistribution.add_hline(y=hotel['lead_time'].mean())
fig_leadtimedistribution.show()
Berdasarkan hasil visualisasi di atas dapat dilihat bahwa reservasi yang dibatalkan cenderung memiliki selisih hari antara pemesanan dan kedatangan yang lebih banyak daripada reservasi yang tidak dibatalkan yang mayoritas memiliki selisih hari antara pemesanan dan kedatangan dibawah rata-rata. Hal ini menunjukkan kecenderungan pelanggan bahwa semakin lama rentang waktu/selisih antara pemesanan maka peluang untuk membatalkan pemesanan juga semakin tinggi.
df_roomtypedifference = pd.crosstab(index=[hotel.assigned_room_type, hotel.reserved_room_type],
columns=hotel.is_canceled, normalize='index')['Yes'].unstack()
fig_roomtypedifference = px.imshow(df_roomtypedifference,
title="Persentase Status Pembatalan Reservasi antara Tipe Kamar yang Dipesan dan Tipe Kamar yang Didapatkan")
fig_roomtypedifference.show()
df = pd.crosstab(index=[hotel.assigned_room_type, hotel.reserved_room_type],
columns=hotel.is_canceled)
df[(df.index.get_level_values(1) == 'L')]
| is_canceled | No | Yes | |
|---|---|---|---|
| assigned_room_type | reserved_room_type | ||
| A | L | 1 | 0 |
| B | L | 1 | 0 |
| C | L | 0 | 1 |
| F | L | 1 | 0 |
| H | L | 1 | 0 |
| L | L | 0 | 1 |
df[(df.index.get_level_values(1) == 'P')]
| is_canceled | No | Yes | |
|---|---|---|---|
| assigned_room_type | reserved_room_type | ||
| P | P | 0 | 12 |
Berdasarkan hasil visualisasi di atas dapat dilihat bahwa mayoritas customer mendapatkan kamar sesuai dengan yang direservasi yang berbanding lurus dengan tingkat pembatalan yang juga semakin tinggi (Tidak ada warna berarti tidak berpasangan). Selain itu, melalui visualisasi ini dapat dikatakan bahwa antara kamar yang dipesan dan kamar yang disediakan tidak memengaruhi pembatalan. Hal ini dapat dilihat dari hasil visualisasi dimana hanya sebagian kecil terdapat kasus pembatalan dimana kamar yang direservasi berbeda dengan kamar yang disediakan. Namun, ada tiga kasus dimana terjadi pembatalan sebesar 100%. Setelah ditelaah lebih 2 dari 3 tersebut hanya direservasi sebanyak 1 kali dan dibatalkan sehingga mencapai persentase pembatalan sebesar 100%. Hal yang menarik adalah pada kasus reservasi kamar tipe P dimana customer juga mendapatkan kamar dengan tipe yang sama, terjadi pembatalan sebanyak 12 kali dari 12 kali reservasi yang dilakukan sehingga mencapai persentase pembatalan sebesar 100%.